/**
 * 1、三元运算符
 * 2、与 (&&) 短路运算
 * 3、多条件检查
 * 4、多条件判断
*/

/**
 * 1、三元运算符
 * 使用三元（条件）运算符在这里节省 5 行代码。 
*/

//Longhand
let marks = 26;
let result;
if (marks >= 30) {
    result = 'Pass';
} else {
    result = 'Fail';
}
//Shorthand
let result = marks >= 30 ? 'Pass' : 'Fail';

/**
 * 2、与 (&&) 短路运算
 * 如果只有当某个变量为 true 时调用一个函数，那么你可以使用与 (&&)短路形式书写。
*/
//Longhand
if (isLoggedin) {
    goToHomepage();
}
//Shorthand
isLoggedin && goToHomepage();

/**
 * 3、多条件检查
 * 对于多个值匹配，可以将所有的值放到数组中，然后使用indexOf()或includes()方法。
*/
//Longhand
if (value === 1 || value === 'one' || value === 2 || value === 'two') {
    // Execute some code
}
// Shorthand 1
if ([1, 'one', 2, 'two'].indexOf(value) >= 0) {
    // Execute some code
}
// Shorthand 2
if ([1, 'one', 2, 'two'].includes(value)) {
    // Execute some code
}

/**
 * 4、多条件判断
 * 如果有代码来检查类型，并且基于类型需要调用不同的方法，可以选择使用多个else if或进行切换，有没有更好的呢？
*/
// long
if (type === 'test1') {
    test1();
}
else if (type === 'test2') {
    test2();
}
else if (type === 'test3') {
    test3();
}
else if (type === 'test4') {
    test4();
} else {
    throw new Error('Invalid value ' + type);
}

// short
const types = {
    test1: test1,
    test2: test2,
    test3: test3,
    test4: test4
};

let func = types[type];
//(!func) && throw new Error('Invalid value ' + type); func();